package com.smartstate.admin.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.smartstate.admin.biz.entity.dto.RolePermissionDto;
import com.smartstate.admin.biz.entity.dto.PermissionDto;
import com.smartstate.admin.biz.entity.dto.PermissionSearchDto;
import com.smartstate.admin.biz.entity.vo.PermissionVo;
import com.smartstate.common.feign.entity.dto.EnterprisePermissionDto;

import java.util.List;
import java.util.Map;

/**
 * @author: runner-up
 * @Package: com.smartstate.admin.biz.service.authority
 * @ClassName: AuthorityService
 */
public interface PermissionService {

    /**
     * 根据用户id查询用户的权限
     */
    List<PermissionVo> findPermissionByUserId(String id);


    /**
     * 根据用户id查询用户的app权限
     */
    List<PermissionVo> findAppPermissionByUserId(String id);

    /**
     * 根据角色id查询权限
     */
    List<PermissionVo> findAuthorityByRoleId(String id);

    /**
     * 根据用户id获取用户角色所拥有的权限
     */
    Map<String, Object> getPermissionByUserId(String id);
    /**
     * 根据用户id获取用户角色所拥有的app权限
     */
    Map<String, Object> getAppPermissionByUserId(String id);
    /**
     * 查询权限分页列表
     */
    IPage<PermissionVo> queryPermissionList(PermissionSearchDto permissionSearchDto);

    /**
     * 获取权限树形结构
     */
    List<Map<String, Object>> queryPermissionTree(PermissionSearchDto permissionSearchDto);
    /**
     * 获取移动端权限树形结构
     */
    List<Map<String, Object>> queryAppPermissionTree(PermissionSearchDto permissionSearchDto);

    /**
     * 根据权限id获取对应权限
     */
    PermissionVo queryPermissionById(String id);

    /**
     * 保存或修改权限
     */
    boolean saveOrUpdatePermission(PermissionDto permissionDto);


    /**
     * 逻辑删除权限
     */
    boolean deletePermission(String id);

    /**
     * 批量逻辑删除权限
     */
    boolean deleteBatchPermission(List<String> ids);

    /**
     * 获取某角色拥有的web权限
     */
    List<PermissionVo> getPermissionByRoleId(String id);
    /**
     * 获取某角色拥有的app权限
     */
    List<PermissionVo> getAppPermissionByRoleId(String id);

    /**
     * 角色分配权限
     */
    boolean savePermissionAndRole(String id, List<RolePermissionDto> rolePermissionDto);
    /**
     * app角色分配权限
     */
//
//    /**
//     * 企业分配权限
//     */
//    boolean savePermissionAndCompany(EnterprisePermissionDto enterprisePermissionDto);/**
//     * 批量删除企业权限
//     */
//    boolean deletePermissionAndCompany(EnterprisePermissionDto enterprisePermissionDto);
}
